package queue;

import java.util.Stack;

//用栈来实现队列,栈是先进后出,队列是先进先出,这里同样需要创建两个栈来实现
//先把元素入到A栈中,要取出队列元素,就要取出A栈栈底的元素,将栈A中除栈底元素移到B中,
// 这里与原来队列之间元素移动不同的是,移动后B栈中的元素顺序与A栈刚好相反,这时如果再像原来那样交换A和B
//那顺序就会弄乱(不插入元素直接取是对的,插入元素的话,再取元素,这时无论怎么转,顺序都是乱的)
//因此,要用别的方法来解题,在上个题中,A是主要,B是辅助删除元素的,每次执行完后,B都是空的
//但在这里,A和B关系是对等的,A专门负责入队列,B专门负责出队列,表示为以下4步:
//1.入队列:把所有B中的元素倒腾到B中,从A入栈
//2.出队列:把所有A中的元素倒腾到B中,从B出栈
//3.取队首元素:把A的元素倒腾给B,取B的栈顶
//4.判定空,只有两个栈都是空时,队列才为空
public class MyQueueOJ {
    Stack<Integer> A = new Stack<>();

    Stack<Integer> B = new Stack<>();
    public void push(int x){
        while(!B.isEmpty()){
            A.push(B.pop());
        }
        A.push(x);
    }

    public int pop(){
        while(!A.isEmpty()){
            B.push(A.pop());
        }
        return B.pop();
    }

    public int peek(){
        while(!A.isEmpty()){
            B.push(A.pop());
        }
        return B.peek();
    }

    public boolean isEmpty(){
        return A.isEmpty() && B.isEmpty();
    }
}
